package com.xucy.springboot.concurrent.tools;

import java.util.concurrent.Semaphore;

/**
 * @Author xucy
 * @Date 2019-07-20 15:49
 * @Description 信号量
 *   假设有5台机器，8个工人，一台机器只能1个工人使用，那没有机器的人 就需要等待
 **/

public class SemaphoreTest {
    public static void main(String[] args) {
        Semaphore semaphore=new Semaphore(5);

        for(int i=0;i<8;i++){
            new Worker(i,semaphore).start();
        }
    }

    static class Worker extends Thread{

        int number;

        Semaphore semaphore;

        Worker( int number, Semaphore semaphore){
            this.number=number;
            this.semaphore=semaphore;
        }

        @Override
        public void run() {
            try {
                //如果进来还有机器，则直接获取，进行生产
                semaphore.acquire();
                System.out.println(Thread.currentThread().getName()+":拿到了机器进行生产");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //生产
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+":释放了机器回家休息了");
            semaphore.release();
        }
    }
}
